<!DOCTYPE html>
<html>

  <head>
	<meta charset="UTF-8">
	<title>Xtend - Xtend 2.17.0 Release Notes</title>
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<meta name="description"
		content="Xtend is a statically typed programming language sitting on top of Java.">
	<meta name="author" content="Sven Efftinge">
	<meta name="author" content="Miro Spoenemann">
	<!--  styles -->
	<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
	<!--[if lt IE 9]>
	  <script src="https://html5shim.googlecode.com/svn/trunk/html5.js"></script>
	<![endif]-->
	
	<!-- Le fav and touch icons -->
	
	<link rel="shortcut icon" href="/Xtext/xtend/images/favicon.png">
	
	<link href="/Xtext/xtend/css/bootstrap.css" rel="stylesheet" type='text/css'>
	<link href="/Xtext/xtend/css/bootstrap-responsive.css" rel="stylesheet" type='text/css'>
	<link href="/Xtext/xtend/css/shield-responsive.css" rel="stylesheet" type='text/css'>
	<link href='/Xtext/xtend/css/fonts.css' rel='stylesheet' type='text/css'>
	<link href="/Xtext/xtend/css/prettyPhoto.css" rel="stylesheet" media="screen" type='text/css'>
	<link href="/Xtext/xtend/css/prettify.css" type="text/css" rel="stylesheet"/>
	<link href="/Xtext/xtend/css/style.css" rel="stylesheet" type='text/css'>
	
	<!--[if lt IE 9]>
	<link href="css/iebugs.css" rel="stylesheet" type='text/css'>
	<![endif]-->

	<!-- BEGIN Cookie Consent
	<link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.0.3/cookieconsent.min.css" />
	<script src="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/3.0.3/cookieconsent.min.js"></script>
	<script>
	window.addEventListener("load", function(){
	window.cookieconsent.initialise({
		"palette": {
		"popup": {
		  "background": "#000"
		},
		"button": {
		  "background": "#f1d600"
		}
		},
		"theme": "edgeless",
		"type": "opt-in",
		onInitialise: function (status) {
		  var type = this.options.type;
		  var didConsent = this.hasConsented();
		  if (type == 'opt-in' && didConsent) {
		    // TODO: enable cookies
		  }
		  if (type == 'opt-out' && !didConsent) {
		    // TODO: disable cookies
		  }
		},
		onStatusChange: function(status, chosenBefore) {
		  var type = this.options.type;
		  var didConsent = this.hasConsented();
		  if (type == 'opt-in' && didConsent) {
		    // TODO: enable cookies
		  }
		  if (type == 'opt-out' && !didConsent) {
		    // TODO: disable cookies
		  }
		}, 
		onRevokeChoice: function() {
		  var type = this.options.type;
		  if (type == 'opt-in') {
		    // TODO: disable cookies
		  }
		  if (type == 'opt-out') {
		    // TODO: enable cookies
		  }
		},
		"content": {
		"href": "https://www.eclipse.org/legal/privacy.php"
		}
	})});
	</script>
	END Cookie Consent -->
</head>


  <body>

    <!-- Navbar -->
  <div class="navbar navbar-fixed-top"
    style="border-bottom: 1px solid #000;">
    <div class="navbar-inner">
      <div class="container">
        <a class="btn btn-navbar" data-toggle="collapse"
          data-target=".nav-collapse"> <span class="icon-bar"></span> <span
          class="icon-bar"></span> <span class="icon-bar"></span>
        </a> <a class="brand" href="/Xtext/xtend/index.html"></a>
        <div class="nav-collapse collapse" style="height: 0px;">
          <ul class="nav">
            <li ><a href="/Xtext/xtend/download.html">Download</a></li>
            <li ><a href="/Xtext/xtend/documentation/index.html">Documentation</a></li>
            <li ><a href="/Xtext/xtend/community.html">Community</a></li>
            <li ><a href="https://eclipse.dev/Xtext">Xtext</a></li>
            <li ><a href="https://www.eclipse.org">Eclipse.org</a></li>
          </ul>
              <!--div class="btn-group pull-right">
                <div class="g-plusone" data-href="https://eclipse.dev/Xtext/xtend"></div>
              </div-->
        </div>
        <!--/.nav-collapse -->
      </div>
    </div>
  </div>
  <!-- Navbar End -->


    <div class="post">

  <header class="post-header">
    <h1 class="post-title">Xtend 2.17.0 Release Notes</h1>
    <p class="post-meta">Mar 5, 2019</p>
  </header>

  <article class="post-content">
    <p>This release focuses on the compatibility with Java 11 &amp; Eclipse 2019-03, stability, performance and technical debt reduction.</p>

<h2 id="java-11">Java 11</h2>

<p>Xtend is now fully compliant with Java 11. Java 11 can be chosen as runtime VM and as target version for the compiler.</p>

<h2 id="xtend-maven-plugin">xtend-maven-plugin</h2>

<h3 id="bom-managed-dependencies">BOM Managed Dependencies</h3>

<p>One major pain point with past releases was that the xtend-maven-plugin used ranged dependencies. This lead sometimes to <a href="https://github.com/eclipse-xtext/xtext/issues/1231">problems with the plugin execution</a>, which had to be worked around by clients by explicit dependency management.</p>

<p>Solving this problem was one of the main motivations behind the <a href="https://www.eclipse.dev/Xtext/releasenotes.html#/releasenotes/2019/03/05/version-2-17-0">introduction of the new Maven BOM</a>. With this BOM all external dependencies of Xtext and its Maven plugins are managed in compatible versions without room for interpretation of dependency version ranges.</p>

<h3 id="upgrade-to-maven-3-api">Upgrade to Maven 3 API</h3>

<p>The <code>xtext-maven-plugin</code> has been refactored to use the latest Maven 3 API. The most significant internal change is that all doclet based configurations have been changed to use Maven 3 annotation API.</p>

<h3 id="faster-startup">Faster Startup</h3>

<p>The plugin was using version ranges for some of its dependencies, especially Google Guava. Resolving the metadata of these ranged dependencies lead to a short time delay on execution of the plugin. All used dependency versions have been pinned to a single version, which speeds up the plugin execution.</p>

<h3 id="resolve-usage-of-deprecated-api">Resolve Usage of Deprecated API</h3>

<p>The plugin has been refactored to resolve all usages of deprecated API from Eclipse Platform and m2e bundles. (<a href="https://github.com/eclipse/xtext-xtend/issues/647">to issue</a>)</p>

<h2 id="quickfixes">Quickfixes</h2>

<h3 id="quickfix-for-unused-private-member">Quickfix for ‘unused private member’</h3>

<p>The <em>unused private member</em> issue can now be resolved by a quickfix. The quickfix is capable to resolve multiple selected issues at once when selected from the <em>Problems</em> view. (<a href="https://github.com/eclipse/xtext-xtend/issues/671">details</a>)</p>

<p><img src="/Xtext/xtend/images/releasenotes/2_17_Xtend-quickfix-remove-unused-member.gif" alt="Quickfix for 'unused private member'" height="50%" width="50%" /></p>

<h3 id="quickfix-to-add-the-abstract-modifier">Quickfix to Add the Abstract Modifier</h3>

<p>If a class is named something like ‘AbstractFoo’ but is not declared abstract. A warning is raised and can be resolved via quickfix insertion of the abstract modifier. (<a href="https://github.com/eclipse/xtext-xtend/issues/719">details</a>)</p>

<p><img src="/Xtext/xtend/images/releasenotes/2_17_Xtend-quickfix-add-abstract-modifier-bc-classname.gif" alt="Quickfix to add the abstract modifier" height="50%" width="50%" /></p>

<h2 id="static-member-favorites">Static Member Favorites</h2>

<p>Annoyed by typing <code>org.junit.Assert.assertEquals</code> to use static methods? Wouldn’t it be cool having all your favorite static methods at hand and let the language do the import automatically? In JDT this feature is known as Static Member Favorites and it comes with a preference page, where you can configure which class’s methods should be visible. Besides wildcard imports you could make a single method visible - it’s up to you.</p>

<p><img src="/Xtext/xtend/images/releasenotes/2_17_Xtend-static-favorites_1.gif" alt="Use favorites for static import" height="50%" width="50%" /></p>

<p>We thought it’s a good idea to reuse the already defined JDT preferences in Xtend. Since this release Xtend supports Static Member Favorites like Java does - but a bit more.</p>

<p><img src="/Xtext/xtend/images/releasenotes/2_17_Xtend-static-favorites_2.png" alt="Invoke content assist static import" height="50%" width="50%" /></p>

<p>In Xtend we have <em>extension methods</em>. Here the first parameter becomes the implicit receiver. The visible static methods are analysed to fit as an extension method and then gets imported like that.</p>

<p><img src="/Xtext/xtend/images/releasenotes/2_17_Xtend-static-favorites_3.png" alt="Invoke content assist static import" height="50%" width="50%" /></p>

<h2 id="deprecations">Deprecations</h2>

<h3 id="deprecation-of-android-archetype">Deprecation of Android Archetype</h3>

<p>The Maven archetype <code>org.eclipse.xtend.maven.android.archetype</code> has been deprecated with this version and is no longer published.</p>

<h3 id="deprecation-of-gwt-related-artifacts">Deprecation of GWT related artifacts</h3>

<p>The bundles <code>org.eclipse.xtend.lib.gwt</code> and <code>org.eclipse.xtext.xbase.lib.gwt</code> are now deprecated. They are subject for removal in one of the next releases.</p>

<h2 id="credits">Credits</h2>

<p>The Xtend Language project is thankful for the dedication of each committer and contributor. This release has been made possible by the following persons (in order of the number of contributed commits to this release):</p>

<ul>
  <li>Christian Dietrich (itemis)</li>
  <li>Karsten Thoms (itemis)</li>
  <li>Holger Schill (itemis)</li>
  <li>Tamas Miklossy (itemis)</li>
  <li>Sebastian Zarnekow (itemis)</li>
  <li>Arne Deutsch (itemis)</li>
  <li>Prajwal Gowda (itemis) <img src="https://img.shields.io/badge/-first%20time%20contributor-green.svg" alt="" /></li>
  <li>Eva Poell (itemis) <img src="https://img.shields.io/badge/-first%20time%20contributor-green.svg" alt="" /></li>
  <li>Stéphane Galland</li>
</ul>

<h2 id="fixed-issues">Fixed Issues</h2>

<p>As in every release cycle we were eagerly hunting down bugs, and reviewed and integrated plenty of contributions. More than 18 issues and almost 50 pull requests have made it into this release. For further details please refer to the following lists:</p>

<ul>
  <li>
    <p><a href="https://github.com/search?q=is%3Aissue+milestone%3ARelease_2.17+is%3Aclosed+repo%3Aeclipse%2Fxtext-xtend&amp;type=Issues">Fixed GitHub issues</a></p>
  </li>
  <li>
    <p><a href="https://github.com/search?q=is%3Apr+milestone%3ARelease_2.17+is%3Aclosed+repo%3Aeclipse%2Fxtext-xtend&amp;type=Issues">Closed Pull Requests</a></p>
  </li>
  <li>
    <p><a href="https://bugs.eclipse.org/bugs/buglist.cgi?bug_status=RESOLVED&amp;bug_status=VERIFIED&amp;bug_status=CLOSED&amp;classification=Modeling&amp;classification=Tools&amp;columnlist=product%2Ccomponent%2Cassigned_to%2Cbug_status%2Cresolution%2Cshort_desc%2Cchangeddate%2Ckeywords&amp;f0=OP&amp;f1=OP&amp;f3=CP&amp;f4=CP&amp;known_name=Xtext%202.17&amp;list_id=16618269&amp;product=TMF&amp;product=Xtend&amp;query_based_on=Xtext%202.17&amp;query_format=advanced&amp;status_whiteboard=v2.17&amp;status_whiteboard_type=allwordssubstr">Fixed Eclipse Bugzilla tickets</a></p>
  </li>
</ul>

  </article>

</div>

    
    <footer class="site-footer">
  <div id="extra">
    <div class="container inner-footer">
      <div class="row">
        <div class="span6">
          <h3 class="footer-links-header">Quick Links</h3>
          <ul class="footer-links clearfix">
            <li><a href="https://www.eclipse.org/legal/privacy.php">Privacy Policy</a></li>
            <li><a href="https://www.eclipse.org/legal/termsofuse.php">Terms of Use</a></li>
            <li><a href="https://www.eclipse.org/legal/copyright.php">Copyright Agent</a></li>
            <li><a href="https://www.eclipse.org/legal/">Legal</a></li>
          </ul>
          <ul class="footer-links clearfix">
            <li><a href="https://www.eclipse.org">Eclipse Home</a></li>
            <li><a href="https://marketplace.eclipse.org/">Market Place</a></li>
            <li><a href="https://www.planeteclipse.org/">Eclipse Planet</a></li>
            <li><a href="https://www.eclipse.org/forums/index.php/f/27/">Xtext Forum</a></li>
          </ul>
        </div>
        <div class="span6">
            <!-- Social Media Links -->
            <h3 class="footer-links-header"">Social Media</h3>
            <ul class="footer-links clearfix">
              <li>
                <a href="https://twitter.com/xtendlang"><img src="/Xtext/xtend/images/Twitter-bird-darkgray.png" class="img-responsive" style="margin-right: 5px;height: 1em;" alt="Twitter icon">@xtendlang on Twitter</a>
              </li>
            </ul>
          </div>

      </div>
    </div>
  </div>
  <a href="#" class="scrollup fadeOutRight animated" style="display: none;">ScrollUp</a>
  <a href="https://dryicons.com/">Icons by https://dryicons.com</a>
  <!-- Le javascript
      ================================================== -->
  <!-- Placed at the end of the document so the pages load faster -->
  <script src="/Xtext/xtend/js/jquery-1.7.1.min.js" type="text/javascript"></script>
  <script src="/Xtext/xtend/js/bootstrap.min.js" type="text/javascript"></script>
  
  <!-- include pretty-print files -->
  <script src="/Xtext/xtend/js/prettify.js" type="text/javascript" ></script>
  <script src="/Xtext/xtend/js/lang-xtend.js" type="text/javascript"></script>
  
  <!-- Include the plug-in -->
  <script src="/Xtext/xtend/js/jquery.prettyPhoto.js" type="text/javascript"></script>
  <script src="/Xtext/xtend/js/jquery.easing.1.3.js" type="text/javascript"></script>
  <script src="/Xtext/xtend/js/custom.js" type="text/javascript"></script>
  <!--script src="https://apis.google.com/js/platform.js" async defer></script-->
  <!--script type="text/javascript">
    var _gaq = _gaq || [];  
      _gaq.push([ '_setAccount', 'UA-2429174-4' ]);
    _gaq.push([ '_trackPageview' ]);
    (function() {
      var ga = document.createElement('script');
      ga.type = 'text/javascript';
      ga.async = true;
      ga.src = ('https:' == document.location.protocol ? 'https://ssl'
          : 'https://www')
          + '.google-analytics.com/ga.js';
      var s = document.getElementsByTagName('script')[0];
      s.parentNode.insertBefore(ga, s);
    })();
  </script-->
</footer>

  </body>

</html>
